#include <stdio.h>
#include "usart_stdio.h"
#include "usart.h"



#pragma import(__use_no_semihosting)


static void Stdio_ConfigGPIO(void)
{
	// Initialize data structure.
	GPIO_InitTypeDef GPIO_InitStructure;
	// Enable RCC.
	STDIO_USARTx_CLK_FUN(RCC_APB2Periph_GPIOA, ENABLE);
	// Config TX GPIO.
	GPIO_InitStructure.GPIO_Pin =	STDIO_USARTx_TXPin;
	GPIO_InitStructure.GPIO_Mode =	GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed =	GPIO_Speed_2MHz;
	GPIO_Init(STDIO_USARTx_PORT, &GPIO_InitStructure);
	// Config RX GPIO.
	GPIO_InitStructure.GPIO_Pin =	STDIO_USARTx_RXPin;
	GPIO_InitStructure.GPIO_Mode =	GPIO_Mode_IN_FLOATING;
	GPIO_Init(STDIO_USARTx_PORT, &GPIO_InitStructure);
}



//void _ttywrch(int c)
//{
//    /* Place your implementation of fputc here */
//    /* e.g. write a character to the USART */
//    USART_SendData(STDIO_USARTx, (uint8_t) c);
//
//    /* Loop until the end of transmission */
//    while (USART_GetFlagStatus(STDIO_USARTx, USART_FLAG_TC) == RESET)
//    {
//		/* Blank loop */
//    }
//}

/*******************************************************************************
* Function Name  : USART_Stdio_Initialize
* Description    : Initialize usart port for stdio functions.
* Input          : Baudrate
* Output         : None
* Return         : None
*******************************************************************************/
void USART_Stdio_Initialize(uint32_t Baudrate)
{
	/* Configure USART1 */
	STDIO_USARTx_CLK_FUN(STDIO_USARTx_RCC, ENABLE);
	USART_Initialize(STDIO_USARTx, Baudrate);
	/* Configure USART1 GPIO */
	Stdio_ConfigGPIO();
}

